package com.jiantong.user.service;

import com.jiantong.user.model.BreedFactory;
import com.jiantong.user.model.User;
import io.terminus.common.model.Paging;
import io.terminus.common.model.Response;

import java.util.List;
import java.util.Map;

/**
 * 养殖档案-养殖地图
 * Created by mz03 on 2017/3/17.
 * zyp
 *
 */
public interface BreedFactoryReadService {

    /**
     * 养殖档案-养殖地图
     * @param id 主键id
     * @return BreedRecord 对象
     */
    Response<BreedFactory> findById(Long id);

    /**
     * 分页查询 养殖档案-养殖地图
     * @param pageNo 页码
     * @param pageSize 条数
     * @param status 状态
     * @return Paging<BreedRecord>
     */
    Response<Paging<BreedFactory>> pagingBreedRecord(Integer pageNo, Integer pageSize, Integer status);

    /**
     * 根据状态status查询所有
     * @param status 状态
     * @return List<BreedRecord> 对象
     */
    Response<List<BreedFactory>> findByStatus(Integer status);

    Response<List<BreedFactory>> findByStatus1(Integer status);

    /**
     * 关键字查询,根据养殖场\农场主名\地区 查询
     * @param   keyword
     * @return List<BreedRecord>
     */
    Response<List<BreedFactory>> findByKeyword(String keyword);

    /**
     * 根据user_id查询对应的用户基础信息
     */
    public Response<User> findByBreedFactoryUserId(Long userId);

    /**
     * 根据ID查询user_id
     */
    public Response<Long> findUserIdById(Long id);


    /**
     * 测试: 根据ID查询一个user
     */
    public Response<User> findUserById(Long id);


    /**
     * 根据一组id分页查询出一组BreedFactoryDto
     *
     */
    public Response<List<BreedFactory>> findBreedFactoryDtoByIds(List<Long> ids);

    /**
     * 根据关键字匹配农场名或地区,分页查询
     * @param pageNo
     * @param pageSize
     * @param keyword
     * @return
     */
    public Response<Paging<BreedFactory>> pagingBreedRecordByKeyword(Integer pageNo, Integer pageSize, String keyword);

    /**
     * 根据一组user_id查询出来一组养殖场
     * @param user_ids
     */
    public Response<List<BreedFactory>> findByUser_id(List<Long> user_ids);

    /**
     * 根据省,市查询养殖场
     *
     * @param provinceId
     * @param cityId
     */
    public Response<List<BreedFactory>> findByCityId(Long provinceId,Long cityId);



    /**
     *养殖场各个种类存栏合计 根据种类类型查询存栏合计 各个种类
     *
     * @param breedType
     * @return
     */
    public Response<List<Integer>> findQuantityByType(Integer breedType);

    public Response<List<Integer>> findQuantityByType1(Integer breedType,int regionId);
    Response<List<BreedFactory>> findByArea(Map<String , Object> map);

    /**
     * 查询养殖场id的集合（status = 1）
     * @param provinceId 省id
     * @param cityId 市id
     * @param regionId 区id
     * @param streetId 街道id
     * @param villageId 村庄id
     * @param isScale 是否是规模场
     * @param scale 规模类型
     * @param breedType 养殖类型
     * @return
     */
    Response<List<Long>> findBreedFactoryIdsByArea(Long provinceId ,Long cityId ,
                                                   Long regionId,Long streetId,
                                                   Long villageId,Integer isScale,
                                                   Integer scale ,Integer breedType);


    /**
     *
     * @param pageNo 页码
     * @param pageSize 每页多少
     * @return Paging<BreedFactory>
     */
    Response<Paging<BreedFactory>> pagingRetail(Integer pageNo, Integer pageSize,Integer status,Long villageId,String name);
    Response<Paging<BreedFactory>> pagingRetail(Integer pageNo, Integer pageSize,Map map);

    /**
     * 求存栏数的和（有待扩展）
     * @param ids id集合
     * @return Map<String,Object>
     */
    Response<List<Map<String,Object>>> sumStockQuantity(List<Long> ids);


    /**
     * 当前登录人拿到其管辖的所有村子
     * @param ids id集合
     * @return Map<String,Object>
     */
    Response<List<Map<String,Object>>> allVillageByIds(List<Long> ids);



    List<String> serachAllCity();

    List<String> serachAllregion(String city);
    List<String> serachAllCity1(Map map);

    List<String> serachAllregion1(Map map);
    List<Long>  serachIdsByarea(Map map);

    /**
     * 官方兽医
     * @param breedFactoryIds 养殖场ids
     * @return Response<List<Long>>
     */
    Response<List<Long>> selectIds(List<Long> breedFactoryIds);

    /**
     *
     * @param pageNo 页码
     * @param pageSize 每页多少
     * @return Paging<BreedFactory>
     */
    Response<Paging<BreedFactory>> pagingScale(Integer pageNo, Integer pageSize,Integer status,String name,List<Long> ids);

    Response<Paging<BreedFactory>> pagingForDocument(Integer page, Integer rows, Map<String, Object> criteria);

    Response<List<BreedFactory>> findListForWebReport(Map<String, Object> criteria);
}
